#include "Solapa.h"
#include <iostream>

#if INSTALANDO
#define PATH_RES PATH_RESOURCES
#else
#define PATH_RES "../Resources/"
#endif

Solapa::Solapa(string descr, vector<Mensaje*> mensajes, vector<InputBox*> input, vector<Boton*> botones, vector<MenuDeslizante*> deslizantes ){
	descripcion = descr;
	desc_alto = 25;
	desc_ancho = 100;
	alto = 265;
	ancho = 500;
	fondo = SDL_CreateRGBSurface(0, ancho, alto, 32, 255, 255, 255, 0 );
    SDL_FillRect(fondo, NULL, SDL_MapRGB(fondo->format, 255, 255, 255));
	x = 75;
	y = 150;
    v_mensajes = mensajes;
    v_inputs = input;
    v_botones = botones;
    v_deslizantes = deslizantes;
    paso = 0;
    string path_res = PATH_RES;
    font14 = TTF_OpenFont((path_res+"fontArial.ttf").c_str(), 14 );
}

string Solapa::getDescripcion(){
	return descripcion;
}

int Solapa::getDescAlto() {
	return desc_alto;
}

int Solapa::getDescAncho() {
	return desc_ancho;
}

SDL_Surface* Solapa::getFondo(){
	return fondo;
}

int Solapa::getX() {
	return x;
}

int Solapa::getY() {
	return y;
}

int Solapa::getAlto() {
	return alto;
}

int Solapa::getAncho() {
	return ancho;
}

vector<Mensaje*> Solapa::getMensajes() {
	return v_mensajes;
}

vector<InputBox*> Solapa::getInputs() {
	return v_inputs;
}

vector<Boton*> Solapa::getBotones() {
	return v_botones;
}

vector<MenuDeslizante*> Solapa::getDeslizantes() {
	return v_deslizantes;
}

unsigned int Solapa::getPaso() {
	return paso;
}

unsigned int* Solapa::getPunteroPaso() {
	return &paso;
}

TTF_Font* Solapa::getFont14() {
	return font14;
}

void Solapa::setFondo(SDL_Surface* superficie){
	fondo = superficie;
}

void Solapa::inicializarFondo(){
	fondo = SDL_CreateRGBSurface(0, ancho, alto, 32, 255, 255, 255, 0 );
    SDL_FillRect(fondo, NULL, SDL_MapRGB(fondo->format, 255, 255, 255));
}
 void Solapa::setPaso(unsigned int i) {
	 paso = i;
 }
void Solapa::DibujarDescripcion(SDL_Surface* superficie, int id, int activa) {

	SDL_Color black = { 0, 0, 0 };
	SDL_Surface* relleno = SDL_CreateRGBSurface(0, getDescAncho() - 2, getDescAlto() - 1, 32, 255, 255, 255, 0 );
    SDL_Surface* recuadro = SDL_CreateRGBSurface(0, getDescAncho(), getDescAlto(), 32, 255, 255, 255, 0 );
    SDL_Surface* texto =  TTF_RenderText_Solid( getFont14(), getDescripcion().c_str() , black);

	if (id == activa) {
		SDL_FillRect(recuadro, NULL, SDL_MapRGB(recuadro->format, 255, 255, 255));
	} else {
		SDL_FillRect(recuadro, NULL, SDL_MapRGB(recuadro->format, 0, 0, 0));
		SDL_FillRect(relleno, NULL, SDL_MapRGB(relleno->format, 170, 170, 170));
		insertar_imagen(1, 1, relleno, recuadro);
	}

	insertar_imagen( 20, 5, texto, recuadro );        //OJO! HARDCODE
	insertar_imagen( id * getDescAncho() + getX(), getY() - getDescAlto(), recuadro, superficie );

    SDL_FreeSurface(relleno);
	SDL_FreeSurface(recuadro);
	SDL_FreeSurface(texto);
}

void Solapa::DibujarSolapa(SDL_Surface* superficie, unsigned int solapa, unsigned int modo) {

	inicializarFondo();

	for( unsigned int i=0; i < getMensajes().size(); i++ ) {
		if (( getMensajes().at(i) )->getPaso() == getPaso() ) {
			( getMensajes().at(i) )->escribirTexto( getFondo() );
		}
	}

	for(unsigned int i=0; i < getInputs().size(); i++) {
		if (( getInputs().at(i) )->getPaso() == getPaso() ) {
		    ( getInputs().at(i) )->dibujarInput( getFondo() );
		}
	}

	for(unsigned int i=0; i < getBotones().size(); i++) {
		if (( getBotones().at(i) )->getPaso() == getPaso() ) {
			( getBotones().at(i) )->dibujarBoton( getFondo() );
		}
	}

	for(unsigned int i=0; i < getDeslizantes().size(); i++) {
		if (( getDeslizantes().at(i) )->getPaso() == getPaso() ) {
			( getDeslizantes().at(i) )->dibujarDeslizante( getFondo(), solapa, modo );
		}
	}

    insertar_imagen( getX(), getY(), getFondo() , superficie );
}

void Solapa::handleSolapa(SDL_Event event, unsigned int* act, int i, unsigned int* b_estado ) {

    if( event.type == SDL_MOUSEBUTTONDOWN )
    {

    	if( event.button.button == SDL_BUTTON_LEFT )
    	{

    		int x = event.button.x;
    		int y = event.button.y;

    		if (( x > getX() ) &&
    			( x < getX() + getAncho()) &&
    			( y > getY() - getDescAlto()) &&
    			( y < getY()) ) {

    				if (( x > getX() + i * getDescAncho() ) &&
    				    ( x < getX() + (i + 1) * getDescAncho())) {
    					    if ( (*act) != i  ) {
    					    	  setPaso(0);
    					    	  (*b_estado)=0;
    						      (*act) = i;
    					    }
    				}

   			}
 	   }
    }
}

void Solapa::handleSolapaActiva(SDL_Event event, unsigned int* estado) {

	int cant_elem = getInputs().size();
    for (int i=0; i < cant_elem; i++ ) {

    	if (( getInputs().at(i) )->getPaso() == getPaso() ) {
    		getInputs().at(i)->handleInput(event, getX(), getY());
    	}

    }

    cant_elem = getDeslizantes().size();
    for (int i=0; i < cant_elem; i++ ) {

    	if (( getDeslizantes().at(i) )->getPaso() == getPaso() ) {
    		getDeslizantes().at(i)->handleDeslizante( event, getX(), getY(), estado);
    	}

    }

}
